<template>
  <div>
    <!-- 挂在echarts的节点  必须有宽高-->
    <div ref="container" style="width:400px;height:300px" />
  </div>
</template>

<script>
/**
 1. 根据官方文档配合vue实现最简化的demo渲染
    1. 图表的初始化位置 一定要放到mounted进行执行
    2. 图表的渲染挂载节点必须具有显示的宽高
    3. 在vue中通常我们会封装一个单独的method 里面包含复杂的初始化代码
    然后mounted中只负责调用函数即可

  2. 图表的参数配置化
  场景: 业务中的图标组件很可能会被复用多次 都是雷达图 但是要渲染的数据是不一样的
  要把那些可能随着业务的不同 传入不同的参数的地方变成props
  3. 图表的新数据更新
  场景: 大屏可视化 有新数据进来了 使用最新的数据重新渲染图表
  实现思路:
   1. 找到一个更新图表的内置方法 [echart.setOption 实例方法]
   2. 使用watch监听一下传入的参数是否变化 一旦变化 调用echart更新数据的方法

  注意小技巧: 如何在多个组件选项中共享数据 -> 动态的把需要共享的数据挂载到this上面去
 */
import * as echarts from 'echarts'
// 在methods选项中 创建一个用来初始化echarts方法
// 在mounted 中调用这个初始化方法 进行渲染

export default {
  name: 'Radar',
  props: {
    title: {
      type: String,
      default: ''
    }
  },
  data() {
    return {

    }
  },
  watch: {
    title() {
      // 调用echart实例的方法 setOption 把新参数传入刷新图标
      // 在这个函数中如何获取methods中initChart中的局部变量呢???
      // this -> 组件实例对象 在组件中的配置项中 this 是共享的
      // 把echart实例 挂在到this上去 那不就是可以共享实例对象了嘛!
      this.myChart.setOption({
        ...this.option,
        title: {
          text: this.title
        }
      })
    }
  },
  mounted() {
    this.initChart()
  },
  methods: {
    initChart() {
      // 获取原生的dom节点 原生的api-> vue中获取一个原生的dom -> ref
      const chartDom = this.$refs.container
      // 调用init方法 得到的是一个echarts的实例对象
      this.myChart = echarts.init(chartDom)
      // 准备图标的参数
      this.option = {
        title: {
          text: this.title // 改造成prop传入 变成活的
        },
        radar: {
          // shape: 'circle',
          indicator: [
            { name: 'Sales', max: 6500 },
            { name: 'Administration', max: 16000 },
            { name: 'Information Technology', max: 30000 },
            { name: 'Customer Support', max: 38000 },
            { name: 'Development', max: 52000 },
            { name: 'Marketing', max: 25000 }
          ]
        },
        series: [
          {
            name: 'Budget vs spending',
            type: 'radar',
            data: [
              {
                value: [4200, 3000, 20000, 35000, 50000, 18000],
                name: 'Allocated Budget'
              },
              {
                value: [5000, 14000, 28000, 26000, 42000, 21000],
                name: 'Actual Spending'
              }
            ]
          }
        ]
      }
      // 调用echarts的实例方法 setOption 让图表渲染显示
      this.option && this.myChart.setOption(this.option)
    }
  }
}
</script>

<style>

</style>

